# 元组
# tua1 = (1, 2, 3, 4, 5)
# print(type(tua1))
# tua2 = ("1")
# print(type(tua2))    #当元组只有一个元素的时候，元组的数据类型为元素的数据类型

# 元组与列表的区别
# 1.元组只能进行查询操作
# 2.元组只有一个元素时要加,

# count(), index(), len() 与列表的用法相同
# tua3 = (1, 2, 3)
# print(tua3.count(1))
# print(tua3.index(3))
# print(len(tua3))

# 格式化输出后面的()本质上就是一个元组
# name = "wan"
# age = 18
# print("%s的年龄为%d" %(name, age))
# tua4 = (name, age)
# print("%s的年龄为%d" %tua4)
# print(type(tua4))
# 数据不可被修改，保护数据的安全

# 字典
# 字典名 = {键1:值1, 键2:值2}
# 字典中的键具有唯一性，值可以重复
# dic = {"key1": "value1", "key2": "value2"}
# print(type(dic))
# print(dic)
# dic1 = {"key1": "value1", "key1": "value2"}
# print(dic1)     #键名重复的会被覆盖

# 查看元素
# dic1 = {"key1": "value1", "key2": "value2"}
# print(dic1["key1"])
# # print(dic1["key3"])     #键名不存在会报错
# print(dic1.get("key2"))
# print(dic1.get("key3"))     #键名不存在会返回None
# print(dic1.get("key3", "不存在"))  #可以指定键名不存在时的返回值

# 修改元素
# dic2 = {"key1": "value1", "key2": "value2"}
# dic2["key1"] = 1
# print(dic2)

# 新增元素
# dic3 = {"key1": "value1", "key2": "value2"}
# dic3["key3"] = "value3"
# print(dic3)

# 删除元素
# dic4 = {"key1": "value1", "key2": "value2"}
# del dic4["key1"]
# print(dic4)
# del dic4["key3"]    #键名不存在会报错
# print(dic4)

# dic4.clear()        #清空字典
# print(dic4)

# x = dic4.pop("key1")
# print(dic4)
# print(x)
# dic4.popitem()      #弹出最后一个键值对（3.7之后）
# print(dic4)

# len()求长度
# dic4 = {"key1": "value1", "key2": "value2"}
# print(len(dic4))

# keys()返回字典里包含的所有键名
# dic5 = {"key1": "value1", "key2": "value2"}
# for i in dic5.keys():
#     print(i)

# values()返回字典里包含的所有值
# dic6 = {"key1": "value1", "key2": "value2"}
# print(dic6.values())
# for i in dic6.values():
#     print(i)

# item()返回字典里包含的所有键值对，键值对以元组的形式
# dic7 = {"key1": "value1", "key2": "value2"}
# for i in dic7.items():
#     print(i, type(i))

# 集合
# s1 = {1, 2, 3}
# s2 = {}     #定义空字典
# print(s2, type(s2))
# s3 = set()  #定义空集合
# print(s3, type(s3))

# 集合具有无序性
# s1 = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}
# print(s1)     #结果每次都不一样
# s2 = {1, 2, 3}
# print(s2)       #结果一样
# 集合无序的实现方式涉及哈希表
# print(hash('a'))
# print(hash('b'))
# print(hash('c'))
# 每次运行哈希值不同
# int整形的哈希值就是它本身，在哈希表中位置不会发生变化

# 集合具有唯一性，可以自动去重
# s1 ={1,2,3,4,1}
# print(s1)

# add()添加元素
# s2 = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}
# s2.add('aa')
# s2.add(('b','c'))
# print(s2)

# update() 把元素拆分，一个个放入集合中
# s2 = {'a', 'b', 'c'}
# s2.update("abcdefg")
# s2.update([1, 2, 3])
# print(s2)

# 删除元素
# remove() 如果集合中有元素就删除，没有就报错
# pop()  删除第一个元素（随机删除）、
# discard() 不会报错

# 交集和并集
# a = {1,2,3,4}
# b = {3,4,5,6}
# print(a & b)
# print(a | b)